package Controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Random;
import java.util.Vector;

import Modelo.Equipo;
import Modelo.Jugador;
import Modelo.Liga;
import Modelo.Partido;
import Modelo.Umpire;
import Vista.Menu;
import Controlador.cCalendario;

public class controladorMenu implements ActionListener {
	
	private Menu PantMenu;
	private Liga liga;
	private Equipo equipo;
	private Jugador jugador;
	private Umpire umpire;
	private Partido partido;
	private Vector<Integer> UmpiresUsados = new Vector<Integer>();
	
	public controladorMenu() {
		super();
		this.PantMenu = new Menu();
		this.PantMenu.setLocationRelativeTo(null);
		this.PantMenu.setVisible(true);
		this.PantMenu.addActionListener(this);
		
		this.liga = liga;
		this.equipo = equipo;
		this.jugador = jugador;
		this.umpire = umpire;
		this.partido = partido;
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		cRegistrarEquipo CRE;
		cCalendario CC;
		String accion = e.getActionCommand();
		
		if (accion.equals("Registrar Equipo")){
			CRE=  new cRegistrarEquipo(liga,equipo);}
		else if (accion.equals("Generar Partidos")){
			GenerarPartidos();
		}
		else if (accion == "Salir"){
			PantMenu.setVisible(false);
			}
		else if (accion.equals("Calendario")){
			CC = new cCalendario(liga,partido);
		}
		else if (accion.equals("Listado de Posiciones")){
			new cListadoPosiciones();
		}
		else if (accion.equals("Registrar Umpire")){
			new cRegistrarEquipo (liga,equipo);
		}
	}
	
	public void umpiresusados(int v){
		UmpiresUsados.add(v);
		}
	
	public void GenerarPartidos(){
		if (liga.UmpiresRegistrados().size()>=3 || liga.getEquipos().size()<=5){
			this.PantMenu.mostrarMensaje("Antes de generar los partidos se debe completar la información" 
					+ "de los Umpires, Equipos y sus respectivos Jugadores");
		}
		else {
			PartidosHC();
			PartidosV();
			this.PantMenu.mostrarMensaje(" Se han generado exitosamente los partidos.");
			
		}
	}	
		
	public void PartidosHC() {
		int j = 0,k=0, ramdom;
		int codigo = 100;
		int innings,index;
		Partido partido = null;
		Umpire principal;
		String Fecha=null;	
		int limite=10;
		int i=1;
		boolean seguir=true;
		innings = 9;
		
		while (j<=5 && j > 0){
			Equipo HomeClub = liga.getEquipos().get(j), Visitante;
			for (int l=1; l <=2; l++){
				while ( i<=limite) {
					//=============INICIO PARTIDO=======================
					if (k>j && k <= 5){ //Valido que no juegue consigo mismo.
						Visitante = liga.getEquipos().get(k);
					//------------Asignar Umpire del Juego----------------
						ramdom = liga.UmpireAleatorio();
						principal = liga.UmpiresRegistrados().get(ramdom);
						liga.agregarJAumpire((principal.getCant_juegosa()+1),ramdom );
						umpiresusados(ramdom);
						int cont = principal.getCant_juegosa();
						liga.agregarPartidoArbitrado(ramdom, cont);
					//------------FIN Asignar Umpire del Juego----------------	
						
					//-------------Asignar Carreras al partido--------------
						int CarrerasHC = liga.CarrerasRamdom();
						int CarrerasV = liga.CarrerasRamdom();
						
					//--------- ExtraInnings---------------
						if (CarrerasHC == CarrerasV) {
							while (seguir) {
								CarrerasHC=+ liga.CarrerasEI();
								CarrerasV =+ liga.CarrerasEI();
								innings++;
								if (CarrerasHC != CarrerasV)
									{seguir = false;}
								}//findelWhile
						}//Fin del If
					//---------FIN ExtraInnings---------------
						
						codigo++;
						this.partido.setCodigo_partido(codigo);
						this.partido.setFecha_partido(Fecha);
						this.partido.setHomeclub(HomeClub);
						this.partido.setInningsj(innings);
						this.partido.setUmpire(principal);
						this.partido.setVisitante(Visitante);
						this.partido.setCarrerasHC(CarrerasHC);
						this.partido.setCarrerasV(CarrerasV);
						liga.AgregarPartido(partido);
						
					//--------------Asignar Jugadores Carreras Impulsadas---------
						int c = 0;
						int ci = 0;
						//HOMECLUB
						while (c <CarrerasHC){
							index = liga.JugadoresAleatorio();
							Jugador jugador = HomeClub.getVectorJugador().get(index);
							ci = jugador.getCarreras_impulsadas() + 1;
							liga.agregarCIJ(j,index, ci);
							c++;
						}
						//VISITANTE
						ci = 0;
						while (c<CarrerasV){
							index = liga.JugadoresAleatorio();
							Jugador jugador = Visitante.getVectorJugador().get(index);
							ci=jugador.getCarreras_impulsadas()+1;
							liga.agregarCIJ(k, index, ci);
							c++;
						}
					//-------------FIN Asignar Jugadores Carreras Impulsadas---------
						
					//---------------- Asignar Jugadores Cuadrangulares--------------
						if (CarrerasHC>=2 && CarrerasV>=2){
							int value = liga.HR();
							Jugador jugador;
							int HR;
								switch (value){
							
										case 0: //NO HUBO HR
										break;
								
										case 1: // UN HR DE EQUIPO HOMECLUB
											index = liga.JugadoresAleatorio();
											jugador = HomeClub.getVectorJugador().get(index);
											HR = jugador.getCuandrangulares()+1;
											liga.agregarHRJ(j,index , HR);
										break;
										
										case 2: //UN HR EQUIPO VISITANTE
											index = liga.JugadoresAleatorio();
											jugador = Visitante.getVectorJugador().get(index);
											HR = jugador.getCuandrangulares()+1;
											liga.agregarHRJ(k,index , HR);
										break;
										
										case 3: //2 HR: UNO PARA CADA UNO
											//HOMECLUB
											index = liga.JugadoresAleatorio();
											jugador = HomeClub.getVectorJugador().get(index);
											HR = jugador.getCuandrangulares()+1;
											liga.agregarHRJ(j,index , HR);
											//VISITANTE
											index = liga.JugadoresAleatorio();
											jugador = Visitante.getVectorJugador().get(index);
											HR = jugador.getCuandrangulares()+1;
											liga.agregarHRJ(k,index , HR);
										break;
										
										case 4: //2 HR: LOS DOS DE HOMECLUB
											for (int s= 0; s<2;s++){
												index = liga.JugadoresAleatorio();
												jugador = HomeClub.getVectorJugador().get(index);
												HR = jugador.getCuandrangulares()+1;
												liga.agregarHRJ(j,index , HR);
											}
										break;
										
										case 5: //2 HR: LOS DOS DE VISITANTE
											for (int s= 0;s<2;s++){
												index = liga.JugadoresAleatorio();
												jugador = Visitante.getVectorJugador().get(index);
												HR = jugador.getCuandrangulares()+1;
												liga.agregarHRJ(k,index , HR);
											}
					//---------------- Asignar Jugadores Cuadrangulares--------------					
											
							}
						}
						if (CarrerasV>CarrerasHC){
							liga.getEquipos().get(j).setJuegos_jugados(liga.getEquipos().get(j).getJuegos_jugados()+1);
							liga.getEquipos().get(j).setJuegos_ganados(liga.getEquipos().get(j).getJuegos_ganados()+1);
							liga.getEquipos().get(k).setJuegos_jugados(liga.getEquipos().get(k).getJuegos_jugados()+1);
							liga.getEquipos().get(k).setJuegos_perdidos(liga.getEquipos().get(k).getJuegos_perdidos()+1);						
						}
						if (CarrerasHC>CarrerasV){
							liga.getEquipos().get(k).setJuegos_jugados(liga.getEquipos().get(k).getJuegos_jugados()+1);
							liga.getEquipos().get(k).setJuegos_ganados(liga.getEquipos().get(k).getJuegos_ganados()+1);
							liga.getEquipos().get(j).setJuegos_jugados(liga.getEquipos().get(j).getJuegos_jugados()+1);
							liga.getEquipos().get(j).setJuegos_perdidos(liga.getEquipos().get(j).getJuegos_perdidos()+1);
						}
						
						
						i++;
					}//if
				//=====================FIN PARTIDO===============
					else {
						if (j<=k)k++;
						if(k>=5){i++;k=0;}
					}
				}//2do while
			}//FOR
					
			j++;
			limite = limite - 2;
		}//while
	}
	
	public void PartidosV() {
		int j = 0,k=0, ramdom;
		int codigo = 100;
		int innings,index;
		Partido partido = null;
		Umpire principal;
		String Fecha=null;	
		int limite=10;
		int i=1;
		boolean seguir=true;
		innings = 9;
		
		while (j<=5 && j > 0){
			Equipo Visitante = liga.getEquipos().get(j), HomeClub;
			for (int l=1; l <=2; l++){
				while ( i<=limite) {
					//=============INICIO PARTIDO=======================
					if (k>j && k <= 5){ //Valido que no juegue consigo mismo.
						HomeClub = liga.getEquipos().get(k);
					//------------Asignar Umpire del Juego----------------
						ramdom = liga.UmpireAleatorio();
						principal = liga.UmpiresRegistrados().get(ramdom);
						umpiresusados(ramdom);
						int cont = principal.getCant_juegosa();
						liga.agregarPartidoArbitrado(ramdom, cont);
					//------------FIN Asignar Umpire del Juego----------------	
						
					//-------------Asignar Carreras al partido--------------
						int CarrerasHC = liga.CarrerasRamdom();
						int CarrerasV = liga.CarrerasRamdom();
						
					//--------- ExtraInnings---------------
						if (CarrerasHC == CarrerasV) {
							while (seguir) {
								CarrerasHC=+ liga.CarrerasEI();
								CarrerasV =+ liga.CarrerasEI();
								innings++;
								if (CarrerasHC != CarrerasV)
									{seguir = false;}
								}//findelWhile
						}//Fin del If
					//---------FIN ExtraInnings---------------
						
						codigo++;
						this.partido.setCodigo_partido(codigo);
						this.partido.setFecha_partido(Fecha);
						this.partido.setHomeclub(HomeClub);
						this.partido.setInningsj(innings);
						this.partido.setUmpire(principal);
						this.partido.setVisitante(Visitante);
						this.partido.setCarrerasHC(CarrerasHC);
						this.partido.setCarrerasV(CarrerasV);
						liga.AgregarPartido(partido);
						
					//--------------Asignar Jugadores Carreras Impulsadas---------
						int c = 0;
						int ci = 0;
						//HOMECLUB
						while (c <CarrerasHC){
							index = liga.JugadoresAleatorio();
							Jugador jugador = HomeClub.getVectorJugador().get(index);
							ci = jugador.getCarreras_impulsadas() + 1;
							liga.agregarCIJ(j,index, ci);
							c++;
						}
						//VISITANTE
						ci = 0;
						while (c<CarrerasV){
							index = liga.JugadoresAleatorio();
							Jugador jugador = Visitante.getVectorJugador().get(index);
							ci=jugador.getCarreras_impulsadas()+1;
							liga.agregarCIJ(k, index, ci);
							c++;
						}
					//-------------FIN Asignar Jugadores Carreras Impulsadas---------
						
					//---------------- Asignar Jugadores Cuadrangulares--------------
						if (CarrerasHC>=2 && CarrerasV>=2){
							int value = liga.HR();
							Jugador jugador;
							int HR;
								switch (value){
							
										case 0: //NO HUBO HR
										break;
								
										case 1: // UN HR DE EQUIPO HOMECLUB
											index = liga.JugadoresAleatorio();
											jugador = HomeClub.getVectorJugador().get(index);
											HR = jugador.getCuandrangulares()+1;
											liga.agregarHRJ(j,index , HR);
										break;
										
										case 2: //UN HR EQUIPO VISITANTE
											index = liga.JugadoresAleatorio();
											jugador = Visitante.getVectorJugador().get(index);
											HR = jugador.getCuandrangulares()+1;
											liga.agregarHRJ(k,index , HR);
										break;
										
										case 3: //2 HR: UNO PARA CADA UNO
											//HOMECLUB
											index = liga.JugadoresAleatorio();
											jugador = HomeClub.getVectorJugador().get(index);
											HR = jugador.getCuandrangulares()+1;
											liga.agregarHRJ(j,index , HR);
											//VISITANTE
											index = liga.JugadoresAleatorio();
											jugador = Visitante.getVectorJugador().get(index);
											HR = jugador.getCuandrangulares()+1;
											liga.agregarHRJ(k,index , HR);
										break;
										
										case 4: //2 HR: LOS DOS DE HOMECLUB
											for (int s= 0; s<2;s++){
												index = liga.JugadoresAleatorio();
												jugador = HomeClub.getVectorJugador().get(index);
												HR = jugador.getCuandrangulares()+1;
												liga.agregarHRJ(j,index , HR);
											}
										break;
										
										case 5: //2 HR: LOS DOS DE VISITANTE
											for (int s= 0;s<2;s++){
												index = liga.JugadoresAleatorio();
												jugador = Visitante.getVectorJugador().get(index);
												HR = jugador.getCuandrangulares()+1;
												liga.agregarHRJ(k,index , HR);
											}
											}
						}
						//---------------- Asignar Jugadores Cuadrangulares--------------	
						
						
					//----------------------Asignar Juegos Ganados,Juegos perdidos, juegos jugados--------------------
						if (CarrerasV>CarrerasHC){
							liga.getEquipos().get(j).setJuegos_jugados(liga.getEquipos().get(j).getJuegos_jugados()+1);
							liga.getEquipos().get(j).setJuegos_ganados(liga.getEquipos().get(j).getJuegos_ganados()+1);
							liga.getEquipos().get(k).setJuegos_jugados(liga.getEquipos().get(k).getJuegos_jugados()+1);
							liga.getEquipos().get(k).setJuegos_perdidos(liga.getEquipos().get(k).getJuegos_perdidos()+1);						
						}
						if (CarrerasHC>CarrerasV){
							liga.getEquipos().get(k).setJuegos_jugados(liga.getEquipos().get(k).getJuegos_jugados()+1);
							liga.getEquipos().get(k).setJuegos_ganados(liga.getEquipos().get(k).getJuegos_ganados()+1);
							liga.getEquipos().get(j).setJuegos_jugados(liga.getEquipos().get(j).getJuegos_jugados()+1);
							liga.getEquipos().get(j).setJuegos_perdidos(liga.getEquipos().get(j).getJuegos_perdidos()+1);
						}
						
						i++;
					}//if
				//=====================FIN PARTIDO===============
					else {
						if (j<=k)k++;
						if(k>=5){i++;k=0;}
					}
				}//2do while
			}//FOR
					
			j++;
			limite = limite - 2;
		}//while
	}
}